package com.niit.sms;

public class CalPerformance {
    
    /**
     * 在学生姓名数组中搜索指定姓名
     * @param names 学生姓名数组
     * @param name 要搜索的姓名
     * @return 如果找到该姓名则返回true，否则返回false
     */
    public boolean searchName(String[] names, String name) {
        // 遍历姓名数组
        for (String s : names) {
            // 比较当前姓名与目标姓名
            if (s.equals(name))
                return true; // 找到匹配的姓名，返回true
        }
        return false; // 遍历完成未找到，返回false
    }

    /**
     * 根据学生成绩对学生进行排名（降序）
     * 使用冒泡排序算法对成绩和姓名同时排序
     * @param s 包含学生成绩和姓名的学生对象
     * @param n 学生人数
     * @return 排序后的学生对象
     */
    public Student ranks(Student s, int n) {
        int swap, i, j;
        int[] array = s.getPercentage(); // 获取成绩数组
        String[] names = s.getNames();   // 获取姓名数组
        String name;
        
        // 冒泡排序实现（降序排列）
        for (i = 0; i < (n - 1); i++) {
            for (j = 0; j < n - i - 1; j++) {
                // 如果前一个成绩小于后一个成绩，则交换位置
                if (array[j] < array[j + 1]){
                    // 交换成绩
                    swap = array[j];
                    // 交换姓名
                    name = names[j];
                    array[j] = array[j + 1];
                    names[j] = names[j + 1];
                    array[j + 1] = swap;
                    names[j + 1] = name;
                }
            }
        }
        // 更新学生对象的成绩和姓名数组
        s.setNames(names);
        s.setPercentage(array);
        return s; // 返回排序后的学生对象
    }

    /**
     * 查找指定成绩在数组中的位置
     * @param marks 成绩数组
     * @param find 要查找的成绩
     * @return 成绩在数组中的位置（从1开始计数），如果未找到则返回0
     */
    public int position(int[] marks, int find) {
        int i = 0;
        // 遍历成绩数组
        for (int m : marks) {
            i++;
            // 如果找到匹配的成绩，返回当前位置
            if (m == (find))
                return i;
            else
                i = 0; // 否则重置计数器
        }
        return i; // 返回最终位置（此处逻辑可能存在问题）
    }
}